home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 2
/
SPACE - Library 2 - Volume 1.iso
/
apps
/
646
/
jukebx14
/
src
/
irqtimer.c
next >
Wrap
C/C++ Source or Header
|
1992-04-28
|
3KB
|
166 lines
#include <tos.h>
#include <stdio.h>
#include <aes.h>
#include "irqtimer.h"
static long get_ticks_120mS(void)
{volatile long *_hz_200 = (long *)0x04BA;
long time = 120/5; /* 120 mS in ticks */
long n_ticks = 0;
long test;
/* wait until the timer ticks!
*/
test = *_hz_200;
while(test == *_hz_200);
/* count the number of loops in 120 mS
*/
time += *_hz_200; /* what time is it i 120 mS ? */
while (time > *_hz_200)
{
n_ticks++;
}
return n_ticks;
}
static long sync_ticks(void)
{long free_run;
int i;
Supexec(get_ticks_120mS);
free_run = 0;
for (i = 1; i <= 16; i++)
free_run += Supexec(get_ticks_120mS);
/* round and take mean
*/
return (free_run+8) / 16;
}
static long get_mean_ticks(int resync)
{static int index = 0;
static long run[16];
int i;
long mean;
if (resync)
{
mean = sync_ticks();
/* copy sync-ticks into the mean array
*/
for (i = 0; i < 16; run[i++] = mean);
return mean;
}
index++;
index &= 0xF;
run[index] = Supexec(get_ticks_120mS);
mean = 0;
for (i = 0; i < 16; i++)
mean += run[i];
/* round and take mean
*/
return (mean+8) / 16;
}
main()
{long free_run, run, total;
double ratio;
OBJECT *menu;
int msg[8], mx, my, mb, ks, kr, br, which;
int more, Index, i;
appl_init();
rsrc_load("irqtimer.rsc");
rsrc_gaddr(0,MENU,&menu);
menu_bar(menu, 1);
graf_mouse(ARROW, 0);
free_run = get_mean_ticks(1);
more = 1;
Index = 0;
do
{
which = evnt_multi(MU_MESAG | MU_TIMER,
0x102, 0x03, 0x00,
0, 0,0,0,0, 0, 0,0,0,0,
msg,
500, 0,
&mx, &my, &mb, &ks, &kr, &br);
if (which & MU_MESAG && msg[0] == MN_SELECTED)
{
switch (msg[4])
{
case ABOUT:
form_alert(1,
"[0][To Index the a background|"
"program - disable it and|"
"select Sync. Then start it,|"
"and Messure.][ OK ]");
break;
case SYNC:
free_run = get_mean_ticks(1);
Index = 0;
break;
case INDEX:
Index ^= 1;
total = 0;
i = 0;
printf("\033H\n\n\n\n");
break;
case QUIT:
more = 0;
}
menu_tnormal(menu,msg[3],1);
}
if (which & MU_TIMER && Index)
{
++i;
run = get_mean_ticks(0);
total += run;
ratio = 100.0*(free_run-run) / (double)free_run;
wind_update(BEG_UPDATE);
printf("%7.1lf", ratio);
if (i&7)
printf(",");
else
{
ratio = 100.0/8.0*(8*free_run-total) / (double)free_run;
printf(" = <%7.1lf >\033H\n\n\n\n",ratio);
total = 0;
}
wind_update(END_UPDATE);
}
} while (more);
menu_bar(menu, 0);
rsrc_free();
appl_exit();
return 0;
}